<?php
/**
 * 微信接口页面
 */
if(!isset($_SESSION)){
    session_start();
}
header("content-Type:text/html;charset=utf-8");

//设置内部编码
mb_internal_encoding('UTF-8');
// 包含类文件
include_once 'linhe.php';

$test = array_key_exists('test',$_GET) ? true : false;
if($test){
    ini_set("display_errors", "On");
}

//logger()->extraInfo=true;
logger()->logInfo("========Paged called by WX=========");

$logRequest =  Logger::getInstance2();
$logRequest->log_path = G_LOG_PATH . '/request';
$logRequest->logInfo("===wx_REQUEST_URI===:".$_SERVER['REQUEST_URI'].
    "\n data:".var_export($GLOBALS["HTTP_RAW_POST_DATA"], true).
    "\n"
);
//todo refactor
//用参数 ?test=true来测试
$test2 = G_IS_TEST;
$debugOn = G_DEBUG_ON; // 是否输出调试信息


$localTest = false;

if ($test2) {

    //构建消息对象
    $vo当前消息=new DoMessage();
    $vo当前消息->set_message_type('text');
    $vo当前消息->set_from_user_name(G_DEFAULT_USER_OPENID);
    $vo当前消息->set_to_user_name(G_DEFAULT_GZH_OPENID);
    $vo当前消息->set_content('测试消息');

} else {

    $echoStr = array_key_exists('echostr',$_GET) ? $_GET["echostr"]:null;
    $signature = array_key_exists('signature',$_GET) ? $_GET["signature"]:null;
    $timestamp = array_key_exists('timestamp',$_GET) ? $_GET["timestamp"]:null;
    $nonce = array_key_exists('nonce',$_GET) ? $_GET["nonce"]:null;
    $公众号id = array_key_exists('appid',$_GET) ? $_GET["appid"]:null;


    if($test==false) {
        // 如果验证签名不通过则退出
        if (false == C信息中心::f验证签名($signature, $timestamp, $nonce,$公众号id)) {
            logger()->logError("微信签名验证失败:【{$signature}】【{$timestamp}】【{$nonce}】");
            echo "微信签名验证失败:【{$signature}】【{$timestamp}】【{$nonce}】";
            return;
        }
    }
    // logger()->logDebug($echoStr);
    // 如果是验证请求,则执行签名验证并返回echostr退出，首次设置服务器链接时用。
    if (!empty($echoStr)) {
        echo($echoStr);
        return; // 返回退出
    }
    // 如果是正常消息，则
    // 首先，取得POST原始数据(XML格式)
    //$postData = $GLOBALS["HTTP_RAW_POST_DATA"];
    $postData = file_get_contents("php://input");
    if ((empty($postData)) && (G_IS_TEST == false))
        return; // 如果没有POST数据，则退出
    $c公众号=new C公众号();
    //   if(true){
    if($test){
        // 解析POST数据(XML格式)
        $vo当前消息=C微信::f解析消息文本 ($postData);

//        $vo当前消息 -> ticket =C信息中心:: ff解析微信消息返回ticket($postData);

    }else{
        $是否加密=$c公众号->f检查公众号是否加密($公众号id);

        if($是否加密){
            $reDatas= $c公众号->f解码解密url($公众号id,$_GET['msg_signature'],$timestamp,$nonce,$_GET['encrypt_type'],$postData);
            // 解析POST数据(XML格式)
            $vo当前消息=C微信::f解析消息文本 ($reDatas);
//        $vo当前消息 -> ticket =C信息中心:: ff解析微信消息返回ticket($postData);
        }else{
            $vo当前消息=C微信::f解析消息文本 ($postData);
        }
    }
}

$_SESSION['vo用户数据']['openID']=$vo当前消息->get_from_user_name();
      $sRespData=Cx消息路由::fj接收微信消息($vo当前消息);


    if($test) {
        // if(true) {
        echo $sRespData;
    } else{
        if($是否加密) {
            $vs加密 = $c公众号->f解码加密url($_GET['appid'], $sRespData, $timestamp, $nonce);
            echo $vs加密;
        }else{
            echo $sRespData;
        }

    }





